package com.yeh.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;


/**
 * 
 * <p>Title: BaseDao</p>
 * <p>Description: TODO</p>
 * <p>Company:  Co.</p>
 * <p>Package: com.yeh.dao</p>
 * @author <a href="mailto:yehshuai@126.com">叶帅</a>  
 * <p>DateTime: 2015年9月16日 ★  下午4:56:44</p> 
 * @Version V1.0.0
 */
public interface BaseDao<T,PK extends Serializable>  {

	/**
	 * 
	 * @Title: get
	 * @Description: 根据主键获取实体
	 * @param @param id
	 * @param @return    
	 * @return T
	 * @throws
	 */
	public T get(PK id);
	
	/**
	 * 
	 * @Title: get
	 * @Description: 根据属性名、属性值获取对象
	 * @param @param propertyName
	 * @param @param value
	 * @param @return    
	 * @return T
	 * @throws
	 */
	public T get(String propertyName, Object value);
	
	/**
	 * 
	 * @Title: get
	 * @Description: 根据属性名、属性值集合获取集合
	 * @param @param propertyMap
	 * @param @return    
	 * @return T
	 * @throws
	 */
	public T get(Map<String, Object> propertyMap);
	
	/**
	 * 
	 * @Title: getList
	 * @Description: 获取当前所有集合
	 * @param @return    
	 * @return List<T>
	 * @throws
	 */
	public List<T> getList();
	
	/**
	 * 
	 * @Title: getList
	 * @Description: 根据主键集合获取实体对象集合
	 * @param @param arrayPks[] 集合
	 * @param @return    
	 * @return List<T>
	 * @throws
	 */
	public List<T> getList(PK[] arrayPks);
	
	/**
	 * 
	 * @Title: getList
	 * @Description: 根据属性名、属性值获取集合
	 * @param @param propertyName 属性名
	 * @param @param value 属性值
	 * @param @return    
	 * @return List<T>
	 * @throws
	 */
	public List<T> getList(String propertyName, Object value);
	
	/**
	 * 
	 * @Title: getList
	 * @Description: 根据属性名、属性值集合获取集合
	 * @param @param propertyMap 属性名、属性值集合
	 * @param @return    
	 * @return List<T>
	 * @throws
	 */
	public List<T> getList(Map<String, Object> propertyMap);

	/**
	 * 
	 * @Title: save
	 * @Description: 保存一个对象返回主键
	 * @param @param object 需要保存的对象
	 * @param @return    
	 * @return Serializable
	 * @throws
	 */
	public PK save(T object);
	
	/**
	 * 
	 * @Title: update
	 * @Description: 更新对象
	 * @param @param object 需要更新的对象   
	 * @return void
	 * @throws
	 */
	public void update(T object);
	
	/**
	 * 
	 * @Title: delete
	 * @Description: 删除对象
	 * @param @param object 需要删除的对象   
	 * @return void
	 * @throws
	 */
	public void delete(T object);
	
	/**
	 * 
	 * @Title: delete
	 * @Description: 根据PKID删除对象
	 * @param @param id    
	 * @return void
	 * @throws
	 */
	public void delete(PK id);
	
	/**
	 * 
	 * @Title: delete
	 * @Description: 根据PKID数组删除对象
	 * @param @param id[] 数组    
	 * @return void
	 * @throws
	 */
	public void delete(PK[] id);
	
	/**
	 * 
	 * @Title: delete
	 * @Description: 根据属性名、数据值删除对象
	 * @param @param paramString 属性名
	 * @param @param paramObject 数据值   
	 * @return void
	 * @throws
	 */
	public void delete(String paramString, Object paramObject);
	
	/**
	 * 
	 * @Title: delete
	 * @Description: 根据属性名、数据值集合删除对象
	 * @param @param propertyMap  属性名、数据值集合   
	 * @return void
	 * @throws
	 */
	public void delete(Map<String,Object> propertyMap);
	
	/**
	 * 
	 * @Title: getTotalCount
	 * @Description: 获取所有对象总数
	 * @param @return    
	 * @return Long
	 * @throws
	 */
	public Long getTotalCount();
	
	/**
	 * 
	 * @Title: isExist
	 * @Description: 根据属性名、数据值判断对象是否已在表中存在
	 * @param @param paramString 属性名
	 * @param @param paramObject 数据值
	 * @param @return    
	 * @return boolean
	 * @throws
	 */
	public boolean isExist(String paramString, Object paramObject);

	/**
	 * 
	 * @Title: isExist
	 * @Description: 根据属性名、数据值集合判断对象是否已在表中存在
	 * @param @param paramMap 属性名、数据值集合
	 * @param @return    
	 * @return boolean
	 * @throws
	 */
	public boolean isExist(Map<String, Object> paramMap);
	
	/**
	 * 
	 * @Title: flush
	 * @Description: 刷新session
	 * @param     
	 * @return void
	 * @throws
	 */
	public void flush();

	/**
	 * 
	 * @Title: clear
	 * @Description: 清除session
	 * @param     
	 * @return void
	 * @throws
	 */
	public void clear();

	/**
	 * 
	 * @Title: evict
	 * @Description: 清除某一对象
	 * @param @param paramObject 需要清除的对象   
	 * @return void
	 * @throws
	 */
	public void evict(Object paramObject);
}
